//window.navigator.userAgent
//IE11 => Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; rv:11.0) like Gecko
//IE10 =>  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)
//IE9 => Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)
//Edge => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.72

// 国产浏览器急速模式
// 急速模式 => Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
// 兼容模式 => Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; rv:11.0) like Gecko

// 谷歌81
// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36

// 谷歌45
// Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36



// 自定义工具栏函数
import ajax from './app/ajax'
import box from './app/box'
import date from './app/date'
import img from './app/img'
import storage from './app/storage'
import text from './app/text'
import tool from './app/tool'

// 项目 逻辑类
import $project from './app/$project'
import $submit from './app/$submit'
import $orderList from './app/$orderList'
// 路由配置
import $router from '@/router'
import $ajax from './$ajax'
import img404 from "@$@/img/img404.gif";

// 以下几个页面，设置了缓存，每次切换页签，页面数据都不会更新，除非关掉：
// patentDoSYXX,patentDoWGZL,patentDoFMZL,trademarkDoZC,copyrightDoMS,copyrightDoRJ
// 以上的6个页面，需要用特定的方法路由跳转，

// 除了以上几个页面，整个系统，路由页面都是，设置了不缓存，每次切换页签都会请求新的数据
// 可以直接用 $router 的 push 和 replace 方法跳转


const $app = {
  /**
   * 全系统只需要改一个地方，即可在正式服/测试服之间切换
   * true正式服/false测试服
   **/
  apiWhere: true,//目前已经废掉 保留日后有需要再用
  mPageMode:true,// 多页签模式 
  baseUrl: '/api/', // 公共基础路径
  rootUrl:'https://www.fuwumao.cn',
  wsUrl:'wss://ws.fuwumao.cn',
  tokenOverTips:'登录超时 或 token过期',
  wsObj:null,//websocket对象
	defImag404:img404,//非 https://lv.fuwumao.cn/img/no_img.png
  timeout: 20000, // 网络超时设置
  showLoading: true, // ajax请求显示转转，全局设置
  winHeight: window.innerHeight, // 获取屏幕高度
  winWidth: window.innerWidth, // 获取屏幕高度
  imgMaxSizeNum:4000,//图片等比例压缩，最大值不能超过，这个值
  imgMinSizeNum:600,//图片等比例压缩，最小值不能超过，这个值
  //一直打开这些菜单，不进行缩展，纯粹老板个人喜好
  alwaysOpenNav:['markTool','patentGz','bigService','accountBig'],
  isMinScreen(){//是否小屏电脑 以 1540为判断标准
    let out=$app.winWidth<1540;
    return out;
  },
  imgWGZL_size:[1750,2500],// 外观专利 图片大小，size限制，[宽,高]，朱老师给size
  loginDay: 1, // 设置登陆的有效范围，单位为天
  tmReportUrl(){//商标购买报告，新页面链接跳转地址
    return $app.baseUrl+'tmReport/showInfo/';
  },
  openTmReport(report_id){//查看商标报告，新页面打开=》配合上者使用
    //获取token
    $app.getTokenFun(null,(token,nowTime)=>{
      window.open($app.tmReportUrl()+report_id+'?api_token='+token);
    });
  },
  //token过期时间
  exTime () {
    return 86400 * 1000 * $app.loginDay
  },
  // 浏览器版本的奇迹bug，谷歌内核80（含80）以下的，图片旋转 的问题，需要编写代码解决
  // 谷歌内核81以上的版本（包含81），图片旋转的问题，已经自动解决了，奇迹
  // 输出 true 需要旋转；输出 false 无需旋转
  img_need_rotate(){
    let need=true;
    let uA_name=window.navigator.userAgent;
    let uA_xu=(uA_name.indexOf('Chrome\/'));

    // 谷歌浏览器
    if(uA_xu>0){
      let aName=uA_name.slice(uA_xu)
      let aName_xu=aName.indexOf('\.');
      let bName=(aName.slice(0,aName_xu)).toLowerCase();//去掉尾巴的后缀名，转成小写;
      let okName=bName.replace('chrome\/','');
      let judge_Shu=parseInt(okName);
      
      need=(judge_Shu<81);
    }

    return need;
  },

  // 登录页面，勾选上自动登录，token会在浏览器存30年。
  foreverTime () {
    // 登录期限10950天 约等于30年
    return 86400 * 1000 * 10950
  },
  fileMaxSize30(){
    //30mb x 1000kb x 1000字节
    return 30*1024*1024;//windows 要按1024运算
  },

  // 列表分页配置
  pageAll: {
    pageSize: 15,//每页加载数量
    pageSizeOpts: [15, 30, 60]//页面显示几条数据，分页选项卡
  },

  // 后台返回数据名称,以下内容请和后台商量好
  xhrCode: 'code', // 码判断
  xhrJudge: 1, // 1成功,0失败
  xhrData: 'data', // 对象值
  xhrMsg: 'msg', // 提示语
  
  // 无需token就可以请求的url
  noToken: [
    'countryList',//获取国家
    'getAreaList',//获取 版权专用 地区
    'cpcAreaList',//获取 商标专用 专利CPC城市列表
    'register',
    'mobileLogin',
    'userLogin',
    'sendCode',
    'captcha',
    'checkMobile',
    'updatePwd',
    'wechat/qrCodeLoginUrl'// 微信扫码登录
  ],
  //后台返回code 为500的时候，需要 自动focus聚焦input 的接口
  needFocusApi:[
    'partner/bindBlank',
    'partner/invoice',
    'partner/sendEmail' ,
    'register',
    'updatePwd',
    'mobileLogin',
    'userLogin',
    'sendCode',
    'checkMobile',
    'manage/addUser'
  ],
  //哪些接口无需 透明的遮罩层
  notNeedLoadingTran:[
    'partner/info',// 企业信息
    'partner/userInfo',// 用户信息
    'partnerService/serviceList',// 增资服务，我的资产
    'partner/readMsg',//标记消息已读
    'partner/messages',//企业用户消息
    'captcha',//验证码
    'checkMobile',//手机检查有没有注册过
    'order/info',//商品详情
    'patent/info',//专利详情
    'tm/cgList',//45类商品查结构
    'tm/info',//商标详情
    'countryList',//获取国家
    'getAreaList',//获取 版权专用 地区
    'cpcAreaList',//获取 商标专用 专利CPC城市列表
    // 微信扫码登录
    'wechat/qrCodeLoginUrl'
  ],

  needLoadingTran(url,callBack){
    let arr = $app.notNeedLoadingTran;
    let judge = false;
    arr.forEach((val, i) => {
      (url == val) && (judge = true);
    });
    // console.log(url,judge)
    
    // true 满足 无需透明层，false透明层继续
    if (!judge) {
      callBack();
    }
  },

  // code报500，需要聚焦=》配合上者使用
  code500needFocus (url, callBack1, callBack2) {
    let arr = $app.needFocusApi;

    let judge = false;
    arr.forEach((val, i) => {
      (url == val) && (judge = true);
    })
    if (!!judge) { // 满足，$Message+需聚焦
      callBack1()
    } else { // 不满足，仅alert
      callBack2()
    }
  },

  // 获取，本系统，用户权限菜单，有哪些可以勾？ 直接从路由里面获取
  leftNavRoot(){
    let {
      options:{
        routes
      }
    }=$router;
    let leftNav=[];
    routes.forEach((val,i)=>{
      if($app.judgeData(val.meta) && $app.judgeData(val.meta.oneNav)){
        // 个人信息，不算在权限范围内
        if(val.name=='accBig'){
          //不是我需要的东西
        }else{
          let children=[];
          let obj={};
          if((val.children).length>1){//2个以上，证明有子菜单
            obj={
              title:val.meta.title,
              type:''
            };
            (val.children).forEach((jar,r)=>{
              children.push({
                title: jar.meta.title,
                type:jar.name,
                children: [],
              });
            });
          }else{//1个儿子，直接把儿子当做一级菜单
            obj={
              title:val.children[0].meta.title,
              type:val.children[0].name
            };
          }

          obj.children=children;
          leftNav.push(obj);
          
        }
        
      }
    });

    // 没有儿子，父级type有值，children:[]
    // 有儿子，父级type为空，children有数据
    // 父亲儿子都有title

    return leftNav;
  },



  // 商标类，每一次操作后，计算价格 正常注册流程
  addEachTmDo (num) {
    return $app.addEachTmbase(num,1);
  },
  //担保注册
  addEachTmDb (num) {
    return $app.addEachTmbase(num,2);
  },
  // 配合上两者使用 who：1普通注册，2担保注册
  addEachTmbase(num,who){

    let {
      tm_register,
      tm_guarantee_register
    } = $app.getSession('bigSetting');

    let base_official_fee,base_service_fee,item_fee;

    if(who==1){
      base_official_fee=tm_register.base_official_fee;
      base_service_fee=tm_register.base_service_fee;
      item_fee=tm_register.item_fee;
    }else if(who==2){
      base_official_fee=tm_guarantee_register.base_official_fee;
      base_service_fee=tm_guarantee_register.base_service_fee;
      item_fee=tm_guarantee_register.item_fee;
    }


    let money = {
      allK: parseFloat(base_official_fee) + parseFloat(base_service_fee),
      item_fee: parseFloat(item_fee)
    }

    let out = 0
    if (num > 10) {
      out += money.allK + (num - 10) * money.item_fee
    } else {
      out += money.allK
    }

    return out;
  },
  

  
  // 支付款计算 拿订单order_id 去调起支付
  // 配合这个文件一起使用 "@$@/_service/payBox";
  payBoxShow (that, order_id,obj) {
    $app.showLoading = false;

    //请求订单详情
    $ajax.orderInfo(order_id,resData=>{
      let orLiInfo=resData;

      console.log('orLiInfo + that = ', orLiInfo,that)
      that.$nextTick(() => {
        // 必须先传值给儿子=》执行儿子方法，若顺序调换，会报错。

        // 修改儿子的数据
        that.$refs['payBox'].orLiInfo = orLiInfo;
        that.$refs['payBox'].payBox = true;

        console.log('payBox = orLiInfo = ',that.$refs['payBox'].orLiInfo);
        
        // obj为选填 才会触发
        if($app.judgeData(obj)){

          // 支付按钮 逻辑
          if(obj.payFun instanceof Function){
            that.$refs['payBox'].payFun=obj.payFun;
          }else{
            that.$refs['payBox'].payFun=undefined;
          }

          //返回按钮 逻辑
          if(obj.backFun instanceof Function){
            that.$refs['payBox'].backFun=obj.backFun;
          }else{
            that.$refs['payBox'].backFun=undefined;
          }
        }else{
          that.$refs['payBox'].payFun=undefined;
          that.$refs['payBox'].backFun=undefined;
        }

        
      });
    });
  },

  //权限编辑初始化菜单
  initLeftNav(list){
    let nav=$app.getSession('leftNav');
    // console.log('权限nav',nav)
    
    list.forEach((val,i)=>{
      let {
        children,
        meta:{
          oneNav
        }
      }=val;
      let youR=false;
      if($app.judgeData(children) && $app.judgeData(oneNav)){
        children.forEach((jar,r)=>{
          if($app.judgeData(nav)){
            // 权限判断
            let leftNav= JSON.stringify(nav);
            let xuH=leftNav.indexOf(jar.name);
            if(xuH>0){
              jar.meta.hideInMenu=false;
              youR=true;
            }
          }else{
            jar.meta.hideInMenu=false;
            youR=true;
          }
        });
      }

      if(youR ){
        //有儿子
        val.meta.hideInMenu=false;
      }else{
        // val.meta.hideInMenu=true;
      }
    });
    return list;
  },

  
  //权限判断
  jdDomR2(resData){
    let {
      is_admin,
      menu_list,
      partner_id,
      menu_not
    }=resData;

    // let navOld=$app.getSession('leftNav');

    if(is_admin || partner_id == 0 ){//主账号
      $app.removeSession('leftNav');// 清空 权限数据，得到所有权限
      // console.log('恭喜你是主账号，获得所有权限');
    }else{//子账号
      menu_list.push('personInfo');
      $app.setSession(menu_list,'leftNav');// 存数据 权限数据
    }
  },


  //file_url 转 file_name，对象字符串都能满足
  urlToName(obj){
    let out='';

    // obj
    if(typeof obj === 'object'){
      // 返回有文件名
      if($app.judgeData(obj.file_name)){
        let file_name=obj.file_name;
        
        let arrC=file_name.lastIndexOf('\_');

        if(arrC>-1){//有
          out=$app.superSlice(file_name,0,arrC);
        }else{//没有
          out=file_name;
        }

      }else if($app.judgeData($app.getVal_fileUrl( obj ) )){//没有

        let nameXu=($app.getVal_fileUrl( obj ) ).lastIndexOf('\/');

        let file_name=$app.superSlice($app.getVal_fileUrl( obj ) ,nameXu+1);
        let arrC=file_name.lastIndexOf('\_');
        if(arrC>-1){//有
          out=$app.superSlice(file_name,0,arrC);
        }else{//没有
          out=file_name;
        }

      }else if($app.judgeData($app.getVal_filePath( obj ) )){//没有

        let nameXu=($app.getVal_filePath( obj ) ).lastIndexOf('\/');

        let file_name=$app.superSlice($app.getVal_filePath( obj ) ,nameXu+1);
        let arrC=file_name.lastIndexOf('\_');
        if(arrC>-1){//有
          out=$app.superSlice(file_name,0,arrC);
        }else{//没有
          out=file_name;
        }

      }else{
        out='暂无文件';
      }
    }else{//字符串
      let nameXu=(obj).lastIndexOf('\/');

      let file_name=$app.superSlice(obj,nameXu+1);
      let arrC=file_name.lastIndexOf('\_');
      
      if(arrC>-1){//有
        out=$app.superSlice(file_name,0,arrC);
      }else{//没有
        out=file_name;
      }
    }
    

    return out;
    
  },

  //companyGo.vue 强制 实名认证判断
  qBoxDo(that){
    let {
      $route: {
        query: { companyGo }
      },
      companyAll
    } = that;

    let out='';
    if (companyGo == 1 && (!$app.judgeData(companyAll) || companyAll.state!=2)) {
      out = true;
    }else{
      out = false;
    }

    return out;
  },

  //rechargeBox.vue 强制 充值判断
  rBoxDo(){
    let {
      name,
      query: { rechargeYes }
    } = $router.history.current;

    let out='';
    if(name=='accountInfo' && $app.judgeData(rechargeYes)){
      out = true;
    }else{
      out = false;
    }

    return out;
  },

  // 是否属于撰写订单，回填申请人，发明人，代理委托书资料
  is103_105_132(luYtype){
    return ((103<=luYtype && luYtype<=105) || (130<=luYtype && luYtype<=132))
  },
  is103_108_132(luYtype){
    return ((103<=luYtype && luYtype<=108) || (130<=luYtype && luYtype<=132))
  },
  is103_108(luYtype){
    return ((103<=luYtype && luYtype<=108))
  },
  is130_132(luYtype){
    return ((130<=luYtype && luYtype<=132))
  },
  // 专利，普通提交订单
  is100_102(luYtype){
    return ((100<=luYtype && luYtype<=102))
  }

  
}

// 对象合并
Object.assign($app, ajax, box, date, img, storage, text, tool, $project, $submit, $orderList)

// 返回在vue模板中的调用接口
export default $app
